<!-- XHTML 1.0 Strict -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<meta name="author" content="Rachid Touzani" />
<meta name="keywords" content=" css, dropdowns, dropdown menu, drop-down, menu, navigation, nav, horizontal, vertical left-to-right, vertical right-to-left, horizontal linear, horizontal upwards, cross browser, internet explorer, ie, firefox, safari, opera, browser, lwis" />
<meta name="description" content="Clean, standards-friendly, modular framework for dropdown menus" />
<link href="../css/dropdown.vertical.css" media="screen" rel="stylesheet" type="text/css" />
<link href="../css/default.ultimate.css" media="screen" rel="stylesheet" type="text/css" />

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Solid and Structural Mechanics Demo 2</title>
<link rel="stylesheet" type="text/css" href="../doxygen.css" />
<link rel="stylesheet" type="text/css" href="../tabs.css"  />
</head>

<body bgcolor="#FFFFFF" link="#FF0000" vlink="#FF00FF" alink="#FF00FF">
<p align="center"><a href="../index.html"><img src="../im/ofeli.gif" width="150" border="0"></a></p>

<center>
  <div id="cse" style="width: 60%;">Loading</div>
  <script src="http://www.google.com/jsapi" type="text/javascript"></script>
  <script type="text/javascript"> 
     google.load('search', '1', {language : 'en', style : google.loader.themes.SHINY});
     google.setOnLoadCallback(function() {
        var customSearchOptions = {};  var customSearchControl = new google.search.CustomSearchControl(
        '012396140824982761142:-qrywxcfi_o', customSearchOptions);
        customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
        customSearchControl.draw('cse');
     }, true);
   </script>
   <style type="text/css">
     .gsc-control-cse {
     font-family: Verdana, sans-serif;
     border-color: #DAE0E5;
     background-color: #DAE0E5;
   }
   .gsc-control-cse .gsc-table-result { font-family: Verdana, sans-serif; }
   input.gsc-input { border-color: #B6BEC5; }
   input.gsc-search-button {
     border-color: #B6BEC5;
     background-color: #D0D1D4;
   }
   .gsc-tabHeader.gsc-tabhInactive {
     border-color: #999999;
     background-color: #EEEEEE;
   }
   .gsc-tabHeader.gsc-tabhActive {
     border-color: #999999;
     background-color: #999999;
   }
   .gsc-tabsArea { border-color: #999999; }
   .gsc-webResult.gsc-result,
   .gsc-results .gsc-imageResult {
     border-color: #FFFFFF;
     background-color: #FFFFFF;
   }
   .gsc-webResult.gsc-result:hover,
   .gsc-imageResult:hover {
     border-color: #D2D6DC;
     background-color: #EDEDED;
   }
   .gsc-webResult.gsc-result.gsc-promotion:hover {
     border-color: #D2D6DC;
     background-color: #EDEDED;
   }
   .gs-webResult.gs-result a.gs-title:link,
   .gs-webResult.gs-result a.gs-title:link b,
   .gs-imageResult a.gs-title:link,
   .gs-imageResult a.gs-title:link b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:visited,
   .gs-webResult.gs-result a.gs-title:visited b,
   .gs-imageResult a.gs-title:visited,
   .gs-imageResult a.gs-title:visited b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:hover,
   .gs-webResult.gs-result a.gs-title:hover b,
   .gs-imageResult a.gs-title:hover,
   .gs-imageResult a.gs-title:hover b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:active,
   .gs-webResult.gs-result a.gs-title:active b,
   .gs-imageResult a.gs-title:active,
   .gs-imageResult a.gs-title:active b { color: #0568CD; }
   .gsc-cursor-page { color: #0568CD; }
   a.gsc-trailing-more-results:link { color: #0568CD; }
   .gs-webResult .gs-snippet,
   .gs-imageResult .gs-snippet,
   .gs-fileFormatType { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl,
   .gs-imageResult div.gs-visibleUrl { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl-short { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl-short { display: none; }
   .gs-webResult div.gs-visibleUrl-long { display: block; }
   .gs-promotion div.gs-visibleUrl-short { display: none; }
   .gs-promotion div.gs-visibleUrl-long { display: block; }
   .gsc-cursor-box { border-color: #FFFFFF; }
   .gsc-results .gsc-cursor-box .gsc-cursor-page {
      border-color: #999999;
      background-color: #FFFFFF;
      color: #0568CD;
   }
   .gsc-results .gsc-cursor-box .gsc-cursor-current-page {
      border-color: #999999;
      background-color: #999999;
      color: #0568CD;
   }
   .gsc-webResult.gsc-result.gsc-promotion {
      border-color: #D2D6DC;
      background-color: #D0D1D4;
   }
   .gsc-completion-title { color: #0568CD; }
   .gsc-completion-snippet { color: #5F6A73; }
   .gs-promotion a.gs-title:link,
   .gs-promotion a.gs-title:link *,
   .gs-promotion .gs-snippet a:link { color: #0066CC; }
   .gs-promotion a.gs-title:visited,
   .gs-promotion a.gs-title:visited *,
   .gs-promotion .gs-snippet a:visited { color: #0066CC; }
   .gs-promotion a.gs-title:hover,
   .gs-promotion a.gs-title:hover *,
   .gs-promotion .gs-snippet a:hover { color: #0066CC; }
   .gs-promotion a.gs-title:active,
   .gs-promotion a.gs-title:active *,
   .gs-promotion .gs-snippet a:active { color: #0066CC; }
   .gs-promotion .gs-snippet,
   .gs-promotion .gs-title .gs-promotion-title-right,
   .gs-promotion .gs-title .gs-promotion-title-right *  { color: #333333; }
   .gs-promotion .gs-visibleUrl,
   .gs-promotion .gs-visibleUrl-short { color: #5F6A73; }
   </style>
</center>
</p>
&nbsp;

<div id="mainmenu">
<div class="text">

 <div class="tabs">
   <ul class="tablist">
   <li><a href="../index.html"><span>Home</span></a>
   <li><a href="../overview.html"><span>Overview</span></a>
   <li><a href="../html/index.html"><span>Class Documentation</span></a>
   <li><a href="../fformats.html"><span>File Formats</span></a>
   <li><a href="../tutorial.html"><span>Tutorial</span></a>
   <li class="current"><a href="../demos.html"><span>Demo Codes</span></a>
 </div>

 </div>
 </div>

&nbsp;
<p>
<h2>Solid and Structural Mechanics Demo 2: A 3-D linear elasticity problem</h2>

<p><table border="2" cellpadding="2" cellspacing="0" >
<tr>
<td align="center" width="35"><a href="lelas2d.html"><img src="../im/backward.gif" border="0"></a></td>
<td align="center" width="35"><a href="../demos.html"><img src="../im/top.gif" border="0"></a></td>
<td align="center" width="35"><a href="contact.html"><img src="../im/forward.gif" border="0"></a></td>
</tr>
</table></p>

<p>
<SPAN class=TEXT>
This code solves three-dimensional linearized elastostatics problems. Its main structure is exactly the same
as the <a href="lelas2d.html">2-D code</a>.
</SPAN>

<ul type=square>
<li><SPAN class=TEXT>We start by defining an instance of class <span class=VAR>
<a href="../html/classOFELI_1_1IPF.html">IPF</a></span> to deal with project data.
We extract useful information from this instance: An output flag to deal with output level
and a save flag to say if the solution is to be saved in file. We then construct the 
<span class=VAR><a href="../html/classOFELI_1_1Mesh.html">Mesh</a></span> and the 
<span class=VAR><a href="../html/classOFELI_1_1Prescription.html">Prescription</a></span> instances.
Note that the second argument in the mesh constructor means that imposed boundary conditions are to be removed
from the list of unknowns. This is important in view of using iterative methods.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   IPF data("lelas3d - 1.2",argv[1]);
   int verbose = data.getVerbose(), output_flag = data.getOutput(), save_flag = data.getSave();
   Mesh ms(data.getMeshFile(),true);
   int nb_dof = ms.getDim();
   Prescription p(ms,data.getDataFile());
</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>
The linear system uses a symmetric matrix. For this, we we use an instance of class 
<span class=VAR><a href="../html/classOFELI_1_1SpMatrix.html">SpMatrix&lt;double&gt;</a></span>.
Then we declare a vector <span class=VAR>b</span> and <span class=VAR>u</span> that will contain respectively
the right-hand side and the solution:
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   SpMatrix&lt;double&gt; A(ms);
   Vect&lt;double&gt; b(ms.getNbEq()), u(ms.getNbEq());
</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>
We then declare boundary conditions and loads. This is done by using
class <span class=var><a href="../html/classOFELI_1_1Prescription.html">Prescription</a></span>. Dirichlet boundary 
conditions are stored in vector <span class=VAR>bc</span>, and
body forces (ditributed loads) are in vector <span class=VAR>body_f</span>.
All these vectors can then by initialized from data as read in class 
<span class=VAR><a href="../html/classOFELI_1_1Prescription.html">Prescription</a></span>.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   Vect&lt;double&gt; bc(ms), body_f(ms), bound_f(ms);
   p.get(BOUNDARY_CONDITION,bc,0);
   p.get(BODY_FORCE,body_f,0);
   p.get(BOUNDARY_FORCE,bound_f,0);
</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>The global matrix and right-hand side are filled
by looping over elements. For each element, an instance of class 
<span class=VAR><a href="../html/classOFELI_1_1Elas3DT4.html">Elas3DT4</a></span>
is considered. This class deals with tetrahedral elements. Deviatoric and dilatational
terms are constructed separately. The other member functions have already been considered
in previous lessons. Note that we use the member function <span class=VAR>updateBC</span>
that takes into account boundary conditions at the element level.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   MeshElements(ms) {
      Elas3DT4 eq(theElement);
      eq.Deviator();
      eq.Dilatation();
      eq.BodyRHS(body_f);
      eq.updateBC(BCVect&lt;double&gt;(bc));
      eq.ElementAssembly(A);
      eq.ElementAssembly(b);
   }
</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>We now solve the linear system by using the Conjugate Gradient method
using the diagonal preconditioner.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   CG(A,Prec&lt;double&gt;(A,DIAG_PREC),b,u,1000,toler,1);
</font></pre>
</td></tr></table></p>
and then construct the solution vector containing boundary conditions:
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   Vect&lt;double&gt; uf(ms);
   uf.insertBC(u,bc);
   if (output_flag > 0)
      cout &lt;&lt; uf;
</font></pre>
</td></tr></table></p>

</SPAN></p>

<li type=square><SPAN class=TEXT>We save the resulting displacement vector
for plotting or any other purpose. For this, the class
<span class=VAR><a href="../html/classOFELI_1_1IOField.html">IOField</a></span>
is used.<br>
It is also classical in solid mechanics
to represent the deformed domain. Here the function <span class=VAR>DeformMesh</span>
enables doing this. We then save the deformed mesh.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   if (save_flag) {
      IOField pf(data.getPlotFile(),IOField::OUT);
      pf.put(uf);
      DeformMesh(ms,uf,1);
      ms.put(data.getProject()+"-1.m");
   }
</font></pre>
</td></tr></table>
</SPAN>

</SPAN>
</ul></p>

&nbsp;&nbsp;
<h2>An example</h2>

<SPAN class=TEXT>
Let us run this program with the data presented in the following project file:
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;
&lt;OFELI_File&gt;
&lt;info&gt;
   &lt;title&gt;&lt;/title&gt;
   &lt;date&gt;&lt;/date&gt;
   &lt;author&gt;&lt;/author&gt;
&lt;/info&gt;
&lt;Project name="beam"&gt;
   &lt;verbose&gt;1&lt;/verbose&gt;
   &lt;output&gt;0&lt;/output&gt;
   &lt;save&gt;1&lt;/save&gt;
   &lt;plot&gt;1&lt;/plot&gt;
   &lt;init&gt;1&lt;/init&gt;
   &lt;mesh_file&gt;beam.m&lt;/mesh_file&gt;
   &lt;plot_file&gt;beam.d&lt;/plot_file&gt;
&lt;/Project&gt;
&lt;Prescription&gt;
   &lt;BodyForce dof="3"&gt;-1.0&lt;/BodyForce&gt;
&lt;/Prescription&gt;
&lt;/OFELI_File&gt;</font></pre>
</td></tr></table></p>

<p>
We note here that the file gives project parameters and prescriptions as well. Indeed,
we have prescribed a vertical body force equal to <span class=TT>-1</span> to the
beam.</span>

<p><table align="center" border="2" cellpadding="2" cellspacing="0" >
<tr>
<td align="center" width="35"><a href="lelas2d.html"><img src="../im/backward.gif" border="0"></a></td>
<td align="center" width="35"><a href="../demos.html"><img src="../im/top.gif" border="0"></a></td>
<td align="center" width="35"><a href="contact.html"><img src="../im/forward.gif" border="0"></a></td>
</tr>
</table>

&nbsp;
<div id="foot_bar">
        Copyright &copy; 1998-2018 Rachid Touzani&nbsp;
</div>

</body>
</html>
